package cbcc2007.compiladores.fkt.analisadorlexico;

import java.util.HashMap;


public final class TabToken {
	
	public static TabToken TabTokenInstance;
	private static HashMap<String, String> tokens;
	
	
	private TabToken(){
		tokens = new HashMap<String, String>();
		inicializaPalavras();
		inicializaOperadores();
	}
	
	public static TabToken getTabTokenInstance(){
		if (TabTokenInstance == null){
			@SuppressWarnings("unused")
			TabToken tabToken = new TabToken();
			return TabTokenInstance;
		}
		else {
			return TabTokenInstance;
		}
	}
	
	static String buscaToken(String chave){
		if(tokens.containsKey(chave)){
			return tokens.get(chave);
		}
		else{
			String tipo = AnLexUtil.verificaToken(chave);
			tokens.put(chave, tipo);
			return tipo;
		}
	}
	
	
	static boolean contemToken(String chave){
		if(tokens.containsKey(chave)){
			return true;
		}
		else return false;
	}
	
	private void inicializaPalavras(){
		tokens.put("program","PROGRAM");
		tokens.put("begin","BEGIN");
		tokens.put("end","END");
		tokens.put("integer","INT");
		tokens.put("boolean","BOOL");
		tokens.put("string","STRING");
		tokens.put("var","VAR");
		tokens.put("const","CONST");
		tokens.put("if","IF");
		tokens.put("then","THEN");
		tokens.put("while","WHILE");
		tokens.put("do","DO");
		tokens.put("read","READ");
		tokens.put("write","WRITE");
		tokens.put("nl","NL");
		tokens.put("true","TRUE");
		tokens.put("false","FALSE");
	}
	
	private void inicializaOperadores(){
		tokens.put("+","+");
		tokens.put("-","-");
		tokens.put("div","div");
		tokens.put("*","*");
		tokens.put("(","(");
		tokens.put(")",")");
		tokens.put(":=",":=");
		tokens.put("=","=");
		tokens.put(">",">");
		tokens.put(">=",">=");	
		tokens.put("<","<");
		tokens.put("<=","<=");
		tokens.put("<>","<>");
		tokens.put(";",";");
		tokens.put(",",",");
		tokens.put(".",".");
		tokens.put("{","{");
		tokens.put("}","}");
		tokens.put("'","'");
	}
}
